el-button<template>
  <div class="app-container">
    <el-card class="box-card" >
      <div slot="header" class="clearfix">
        <!-- <el-button style="float: right;" size="small" type="danger" @click="goBack">关闭</el-button> -->
      </div>
      <el-tabs  tab-position="top" v-model="activeName" @tab-click="handleClick">
        <!--流程流转记录-->
        <el-tab-pane label="流转记录" name="2">

           <el-col :span="16" :offset="4">
         
            <ProcessInstanceTimeline :activity-nodes="activityNodes" />
           
         </el-col>
          <!-- <el-col :span="16" :offset="1">
        <ProcessInstanceStep :activity-nodes="activityNodes"/>
         </el-col> -->
 <!-- 操作栏按钮 -->
          <div class="b-t-solid border-t-[1px] border-[var(--el-border-color)]">
          <ProcessInstanceOperationButton
            ref="operationButtonRef"
            :process-instance="processInstance"
            :process-definition="processDefinition"
            @success="refresh"
          />
        </div>
      <el-table :data="taskList" border header-cell-class-name="table-header-gray">
    <el-table-column label="审批节点" prop="name" min-width="120" align="center" />
    <el-table-column label="审批人" min-width="100" align="center">
      <template #default="scope">
        {{ scope.row.assigneeUser?.userName || scope.row.ownerUser?.userName }}
      </template>
    </el-table-column>
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="开始时间"
      prop="createTime"
      min-width="140"
    />
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="结束时间"
      prop="endTime"
      min-width="140"
    />
    <el-table-column align="center" label="审批状态" prop="status" min-width="90">
      <template #default="scope">
        <dict-tag :options="bpm_task_status" :value="scope.row.status" />
      </template>
    </el-table-column>
    <el-table-column align="center" label="审批建议" prop="reason" min-width="200">
      <template #default="scope">
        {{ scope.row.reason }}
      </template>
    </el-table-column>
    <el-table-column align="center" label="耗时" prop="durationInMillis" min-width="100">
      <template #default="scope">
        {{ formatPast2(scope.row.durationInMillis) }}
      </template>
    </el-table-column>
  </el-table>
         
        </el-tab-pane>
        <!--流程图-->
        <el-tab-pane label="流程图" name="3">
        <!-- <bpmn-viewer :flowData="flowData"  :procInsId="taskForm.procInsId"/>  -->
          <ProcessInstanceBpmnViewer
                :loading="processInstanceLoading"
                :model-view="processModelView"
              />
        </el-tab-pane>
    </el-tabs>

    </el-card>
  </div>
</template>

<script setup name="Record" >
import { dateFormatter, formatPast2 } from '@/utils/formatTime'
import {getTaskListByProcessInstanceId} from "@/api/flowable/todo";
import {flowRecord} from "@/api/flowable/finished";
import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition";
import {getApprovalDetail,getProcessInstanceBpmnModelView} from "@/api/flowable/instance";
import ProcessInstanceBpmnViewer from './ProcessInstanceBpmnViewer.vue'
import ProcessInstanceTimeline from './ProcessInstanceTimeline';
import ProcessInstanceOperationButton from './ProcessInstanceOperationButton.vue'
import ProcessInstanceStep from './ProcessInstanceStep'
      // 模型xml数据
    const route = useRoute()
    const { proxy } = getCurrentInstance();
    const { bpm_task_status } = proxy.useDict("bpm_task_status");
    const flowData=ref({});
    const activeName= '2';
    const  activityNodes=ref([]);
    const processModelView = ref({});
    const operationButtonRef = ref() // 操作按钮组件 ref
    const processInstanceLoading = ref(false) // 流程实例的加载中
    const processInstance = ref({}) // 流程实例
    const processDefinition = ref({}) // 流程定义
      // 查询参数
    const queryParams=ref({});
      // 遮罩层
    const loading=ref(true);
    const flowRecordList=ref([]); // 流程流转数据
    const taskList=ref([]);//流程任务的数组
    const taskForm=reactive({
        multiple: false,
        comment:"", // 意见内容
        procInsId: "", // 流程实例编号
        instanceId: "", // 流程实例编号
        deployId: "",  // 流程定义编号
        taskId: "" ,// 流程任务编号
        procDefId: "",  // 流程编号
      });
  
  
 function created() {
    taskForm.deployId = route.query && route.query.deployId;
    taskForm.taskId  = route.query && route.query.taskId;
    taskForm.procInsId = route.query && route.query.procInsId;
    // 流程任务重获取变量表单
    //processVariables( taskForm.taskId)
   // getFlowRecordList(taskForm.procInsId, taskForm.deployId);
    ApprovalDetail(taskForm.procInsId, taskForm.deployId)
    TaskListByProcessInstanceId(taskForm.procInsId);
   
  }

  /** 获取流程模型视图*/
const getProcessModelView = async () => {
 
    // 重置，解决 BPMN 流程图刷新不会重新渲染问题
    processModelView.value = {
      bpmnXml: ''
    }
  const data = await getProcessInstanceBpmnModelView(taskForm.procInsId)
  if (data) {
    processModelView.value = data
  }
}
  
  function  handleClick(tab, event) {
      if (tab.props.name === '3'){
    
      getProcessInstanceBpmnModelView(taskForm.procInsId).then(res=>{
        processModelView.value = res.data;
      })
      }
    }
 function   setIcon(val) {
      if (val) {
        return "el-icon-check";
      } else {
        return "el-icon-time";
      }
    }
   function setColor(val) {
      if (val) {
        return "#2bc418";
      } else {
        return "#b3bdbb";
      }
    }
/**
 * 操作成功后刷新
 */
const refresh = () => {
  // 重新获取详情
  getDetail()
}

/** 获得详情 */
const getDetail = () => {
  ApprovalDetail(taskForm.procInsId, taskForm.deployId)

  getProcessModelView()
  TaskListByProcessInstanceId(taskForm.procInsId)
}

    //流程任务的数组
   function  TaskListByProcessInstanceId(procInsId) {
      getTaskListByProcessInstanceId(procInsId).then(res => {
        taskList.value = res.data;
      }).catch(res => {
        goBack();
      })
    };
    /** 流程流转记录 */
   function getFlowRecordList(procInsId, deployId) {
     
      const params = {procInsId: procInsId, deployId: deployId}
      flowRecord(params).then(res => {
        flowRecordList.value = res.data.flowList;
      }).catch(res => {
        goBack();
      })
    }

    function ApprovalDetail(procInsId, deployId) {
     
      const params = {processInstanceId: procInsId, deployId: deployId}
      getApprovalDetail(params).then(res => {
        activityNodes.value=res.data.activityNodes
        processInstance.value = res.data.processInstance
      
        processDefinition.value =res.data.processDefinition
        operationButtonRef.value?.loadTodoTask(res.data.todoTask)
        console.log("getApprovalDetail",res.data)
      }).catch(res => {
        //goBack();
        console.log("res",res)
      })
    }
    /** 获取流程变量内容 */
   function processVariables(taskId) {
      if (taskId) {
        // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示
        // getProcessVariables(taskId).then(res => {
        //   this.$nextTick(() => {
        //     // 回显表单
        //     this.$refs.vFormRef.setFormJson(res.data.formJson);
        //     this.$nextTick(() => {
        //       // 加载表单填写的数据
        //       this.$refs.vFormRef.setFormData(res.data);
        //       this.$nextTick(() => {
        //         // 表单禁用
        //         this.$refs.vFormRef.disableForm();
        //       })
        //     })
        //   })
        // });
      }
    }
    /** 返回页面 */
  function  goBack() {
      // 关闭当前标签页并返回上个页面
      const obj = { path: "/task/process", query: { t: Date.now()} };
      proxy.$tab.closeOpenPage(obj);
    }
  
   created()  
</script>
<style lang="scss" scoped>
.test-form {
  margin: 15px auto;
  width: 800px;
  padding: 15px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}

.el-tag + .el-tag {
  margin-left: 10px;
}

.my-label {
  background: #E1F3D8;
}
</style>
